using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._SpatialAnalystTools._Multivariate
{
    /// <summary>
    /// <para>Edit Signatures</para>
    /// <para>Edits and updates a signature file by merging, renumbering, and deleting class signatures.</para>
    /// <para>通过合并、重新编号和删除类签名来编辑和更新签名文件。</para>
    /// </summary>    
    [DisplayName("Edit Signatures")]
    public class EditSignatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public EditSignatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_raster_bands">
        /// <para>Input raster bands</para>
        /// <para><xdoc>
        ///   <para>The input raster bands for which to edit the signatures.</para>
        ///   <para>They can be integer or floating point type.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要编辑特征的输入栅格波段。</para>
        ///   <para>它们可以是整数类型或浮点类型。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_in_signature_file">
        /// <para>Input signature file</para>
        /// <para><xdoc>
        ///   <para>Input signature file whose class signatures are to be edited.</para>
        ///   <para>A .gsg extension is required.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要编辑其类签名的输入签名文件。</para>
        ///   <para>需要 .gsg 扩展名。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_in_signature_remap_file">
        /// <para>Input signature remap file</para>
        /// <para><xdoc>
        ///   <para>Input ASCII remap table containing the class IDs to be merged, renumbered, or deleted.</para>
        ///   <para>The extension can be .rmp, .asc or .txt. The default is .rmp.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入 ASCII 重新映射表，其中包含要合并、重新编号或删除的类 ID。</para>
        ///   <para>扩展名可以是 .rmp、.asc 或 .txt。默认值为 .rmp。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_signature_file">
        /// <para>Output signature file</para>
        /// <para><xdoc>
        ///   <para>The output signature file.</para>
        ///   <para>A .gsg extension must be specified.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出签名文件。</para>
        ///   <para>必须指定 .gsg 扩展名。</para>
        /// </xdoc></para>
        /// </param>
        public EditSignatures(List<object> _in_raster_bands, object _in_signature_file, object _in_signature_remap_file, object _out_signature_file)
        {
            this._in_raster_bands = _in_raster_bands;
            this._in_signature_file = _in_signature_file;
            this._in_signature_remap_file = _in_signature_remap_file;
            this._out_signature_file = _out_signature_file;
        }
        public override string ToolboxName => "Spatial Analyst Tools";

        public override string ToolName => "Edit Signatures";

        public override string CallName => "sa.EditSignatures";

        public override List<string> AcceptEnvironments => ["cellSize", "cellSizeProjectionMethod", "extent", "geographicTransformations", "mask", "outputCoordinateSystem", "scratchWorkspace", "snapRaster", "workspace"];

        public override object[] ParameterInfo => [_in_raster_bands, _in_signature_file, _in_signature_remap_file, _out_signature_file, _sample_interval];

        /// <summary>
        /// <para>Input raster bands</para>
        /// <para><xdoc>
        ///   <para>The input raster bands for which to edit the signatures.</para>
        ///   <para>They can be integer or floating point type.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要编辑特征的输入栅格波段。</para>
        ///   <para>它们可以是整数类型或浮点类型。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input raster bands")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_raster_bands { get; set; }


        /// <summary>
        /// <para>Input signature file</para>
        /// <para><xdoc>
        ///   <para>Input signature file whose class signatures are to be edited.</para>
        ///   <para>A .gsg extension is required.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要编辑其类签名的输入签名文件。</para>
        ///   <para>需要 .gsg 扩展名。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input signature file")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_signature_file { get; set; }


        /// <summary>
        /// <para>Input signature remap file</para>
        /// <para><xdoc>
        ///   <para>Input ASCII remap table containing the class IDs to be merged, renumbered, or deleted.</para>
        ///   <para>The extension can be .rmp, .asc or .txt. The default is .rmp.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入 ASCII 重新映射表，其中包含要合并、重新编号或删除的类 ID。</para>
        ///   <para>扩展名可以是 .rmp、.asc 或 .txt。默认值为 .rmp。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input signature remap file")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_signature_remap_file { get; set; }


        /// <summary>
        /// <para>Output signature file</para>
        /// <para><xdoc>
        ///   <para>The output signature file.</para>
        ///   <para>A .gsg extension must be specified.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出签名文件。</para>
        ///   <para>必须指定 .gsg 扩展名。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output signature file")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_signature_file { get; set; }


        /// <summary>
        /// <para>Sample interval</para>
        /// <para><xdoc>
        ///   <para>The interval to be used for sampling.</para>
        ///   <para>The default is 10.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于采样的时间间隔。</para>
        ///   <para>默认值为 10。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Sample interval")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _sample_interval { get; set; } = 10;


        public EditSignatures SetEnv(object cellSize = null, object extent = null, object geographicTransformations = null, object mask = null, object outputCoordinateSystem = null, object scratchWorkspace = null, object snapRaster = null, object workspace = null)
        {
            base.SetEnv(cellSize: cellSize, extent: extent, geographicTransformations: geographicTransformations, mask: mask, outputCoordinateSystem: outputCoordinateSystem, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, workspace: workspace);
            return this;
        }

    }

}